[Java][Spring Boot] メールを送信する。
はじめに
バッチ処理の途中で失敗した場合などに、どこでどんなエラーが発生したのかを知る必要があります。 アプリケーションで取得したExceptionなどをメールで送受信できると便利ですよね、という事でメールを送信する方法を調べたので備忘録として記しておきます。
環境
Mac OSX 10.10.5 Yosemite Java 1.8.0_91 Spring Boot 1.3.7 PostgreSQL 9.5.1 Eclipse Mars 2
簡単なメールを送信
application.properties
spring.mail.host=smtp.gmail.com spring.mail.port=587 spring.mail.username=送信者のメールアドレス spring.mail.password=パスワード spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true
上記はGmailの例をpropertiesに書いていますが、もちろんymlに書いても大丈夫です。
注意点として、2段階認証を設定している場合はパスワードの代わりにアプリパスワードを設定します。 アプリパスワードの取得はこちらを参考にしてください。 Google アプリ パスワードでログイン
実装クラス
package com.send.mail; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.mail.MailSender; import org.springframework.mail.SimpleMailMessage; import org.springframework.scheduling.annotation.Async; @SpringBootApplication public class MailSenderApplication { public static void main(String[] args) { try (ConfigurableApplicationContext cac = SpringApplication.run(MailSenderApplication.class, args);) { cac.getBean(MailSenderApplication.class).execute(); } } public void execute() { try { em.createNativeQuery("SELECT * FROM ").getResultList(); } catch (Exception e) { String errorMsg = "エラー発生 : " + e.getMessage(); send(errorMsg); } } @Autowired private MailSender mailSender; @Async public void send(String errorMsg) { SimpleMailMessage msg = new SimpleMailMessage(); msg.setTo("送信先アドレス1"); msg.setBcc("送信先アドレス2"); msg.setCc(new String[] {"送信先アドレス3", "送信先アドレス4"}); msg.setSubject("メールタイトル"); msg.setText(errorMsg); mailSender.send(msg); } }
16行目、自身のBeanを取得してメソッドexecuteを実行。
1〜8行目、execute()。 SQL文を間違えて実行を失敗させてExceptionを発生させています。 Exceptionをキャッチしたら、メールで送信したいメッセージを作成して送信メソッドに投げます。
29〜30行目、メールを送信するためのMailSenderを@Autowired。
32〜45行目、send()。 送信メソッド。 32行目、@Asyncをアノテートして非同期処理として設定。 34〜39行目、送信内容を設定。 BCCとCCの送信先には、37行目の様に配列でも設定可能。 40行目、MailSenderにセットしてsend()を実行でメール送信。
メールの文章の改行は「\n」でできました。
さいごに
今回紹介したSpringを使用したメール送信ではファイル添付はできなさそうですが、メッセージを送るだけなら事足りるのではないでしょうか。 今度はファイル添付の方法も調べて書きたいと思います。